package String;

/**
 * String 的常用方法
 */
public class Demo2 {
    public static void main(String[] args) {

        String str = "abcdefghijklmncdfdf";

        /*
            charAt(int) 获取到索引位置所在的字符的值，索引位置从0开始，最后一个索引位置是 长度-1
                        注意：如果索引位置超过了字符串的长度，抛出 StringIndexOutOfBoundsException
         */
        System.out.println(str.charAt(13));

        /*
            length() 获取到字符串的长度
            isEmpty() 判断字符串是否为空 ""或者长度=0 --> true
         */
        System.out.println(str.length());

        //遍历字符串中的所有字符
        for(int i = 0;i<str.length();i++){
            System.out.print(str.charAt(i) + "\t");
        }

        System.out.println("\n首次出现的位置："+ findChar('l',str));

        /*
            indexOf(char) 将返回指定字符所在的索引位置，从字符串的索引位置为0开始查找
            indexOf(char,int)  将返回指定字符所在的索引位置，从指定的索引位置开始查找
            indexOf(String) 返回指定字符串，所在的索引位置，从字符串的索引位置为0开始查找
            indexOf(String,int) 返回指定字符串，所在的索引位置，从指定的索引位置开始查找

            同 lastIndexOf() 用法是一样的，不同的是，是从右向左开始查找
         */
        int index = str.indexOf('c');
        System.out.println(index);

        index = str.indexOf('c',5);
        System.out.println(index);

        index = str.indexOf("mn");
        System.out.println(index);

        str.indexOf("mn",5);
        System.out.println(index);

        //查找指定字符出现的次数
        int times = findTimes("abc","abcsdflksjdofsjdfabclaskdfjlsabclasdjflsabclsdjfk");
        System.out.println(times);

        /*
            equals() 比较的是两个值，尽量要把常量写到前面。在进行字符串比较的时候，首先要判空
                     注：容易出现 NullPointerException
            equalsIgnoreCase() 也是比较两个值，而且会忽略大小写
         */
//        Demo2 d = new Demo2();
//        if(d.getUsername() != null && !"".equals(d.getUsername())){
//
//            if(d.getUsername().equals("admin") ){
//                System.out.println("匹配成功");
//            }
//        }

        /*
            contains(String) 判断字符串中是否包含指定的字符串，返回boolean型结果
         */
        System.out.println(str.contains("c"));


        /*
            replace(String target,String replace)
                由于字符串是不可变的，所以，做替换时，会将原字符串的值拷贝，
                然后在拷贝的值的基础上再进行修改
         */
        String newStr = str.replace("c","C");
        System.out.println(str + "-----" + newStr);

        /*
            split(String) 将字符串进行分割，放到字符串数组中
         */
        String[] strArr = str.split("c");
        System.out.println(strArr[0]+"---"+strArr[1]+"---"+strArr[2]);

        /*
            startsWith(String) 判断字符串是否以指定的字符为开头
            endsWith(String) 判断字符串是否以指定的字符为结尾
         */

        System.out.println(str.startsWith("dfabc"));
        System.out.println(str.endsWith("df"));

        /*
            toCharArray() 将字符串中的每个字符，放到字符数组当中

         */
        char[] c = str.toCharArray();

        /*
            toUpperCase() 字符串大写
            toLowerCase() 字符串小写
            由于字符串是不可变的，所以，使用全部大写的方法后，会在备份的基础上修改，不会影响原值
         */
        String upperStr = str.toUpperCase();
        System.out.println(upperStr + "---" + str);

        /*
            valueOf() 静态方法，会进行数据类型的转换，将其他类型 转为 String
         */
        String.valueOf(1);

        /*
            substring(int) 从指定索引位置（包含在内）向后截取到最后
            substring(int start,int end) [start,end) 不会截取到end，而是截取到end-1
            由于字符串是不可变的，所以，截取的也是备份数据，不会影响原值
         */
        String subStr = str.substring(2);
        System.out.println(subStr + "--" + str);

        subStr = str.substring(2,5);
        System.out.println(subStr + "--" + str);
    }

    /**
     * 判断某个字符，在该字符串中都次出现的位置
     * @param c  指定的要查找的字符
     * @param str 固定的一个字符串
     * @return 一个索引位置
     */
    public static int findChar(char c,String str){

        for(int i = 0;i<str.length();i++){

            if(str.charAt(i) == c){
                return i;
            }
        }
        return  -1;
    }

    /**
     * 从一堆字符串中，查找指定字符串，重复出现的次数
     *  abcsdflksjdofsjdfabclaskdfjlsabclasdjflsabclsdjfk abc 出现的次数
     * @param find 指定要查找的字符串
     * @param str  字符串对象
     * @return 出现次数
     */
    public static int findTimes(String find,String str){

        /*int index = str.indexOf("abc");

        index = str.indexOf("abc",index+3);

        str.indexOf("abc",index+3);*/

        int repeatTimes = 0;
        int findIndex = 0;

        while(true){

            //查找到字符串出现的位置
            findIndex = str.indexOf(find,findIndex);

            if(findIndex == -1){
                break;
            }else{
                repeatTimes++;
                findIndex += find.length();
            }
        }

        return repeatTimes;
    }
}
